gtktreeview: Fix child access after TEST_EXPAND_ROW
authorThomas Holder <thomas@thomas-holder.de>
Tue, 22 Sep 2020 07:27:29 +0000 (09:27 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 23 Sep 2020 11:53:33 +0000 (07:53 -0400)
In gtk_tree_view_build_tree with recurse=TRUE, the TEST_EXPAND_ROW
signal might invalidate the child iterator. Getting the iterator after
the signal (instead of before) fixes the issue.

Fixes https://gitlab.com/inkscape/inkscape/-/issues/1879

gtk/gtktreeview.c

index e9f6c1232792cd9b1012eb1836c755cb2c6ce984..315360c6832beae98a1e38175e7bc3c793493dd5 100644 (file)
@@ -8616,13 +8616,13 @@ gtk_tree_view_build_tree (GtkTreeView   *tree_view,
          else
            gtk_tree_path_next (path);
 
-         if (gtk_tree_model_iter_children (priv->model, &child, iter))
+         if (gtk_tree_model_iter_has_child (priv->model, iter))
            {
              gboolean expand;
 
              g_signal_emit (tree_view, tree_view_signals[TEST_EXPAND_ROW], 0, iter, path, &expand);
 
-             if (gtk_tree_model_iter_has_child (priv->model, iter)
+             if (gtk_tree_model_iter_children (priv->model, &child, iter)
                  && !expand)
                {
                  temp->children = gtk_tree_rbtree_new ();